//
//
//  ValidateInputData.RegularParameter =  [['s','s','s',n,n],['s','s','s',n,n],['s','s','s',n,n]]
//                                参数 =   变量名，中文名，变量类别，变量最小，变量最大。
// 中文长度，以一个中文为两个数字。
//  ValidateInputData.begin(); // 开始
//
//
var ValidateInputData = {
	OutputFunction : '' , //回调函数名
	 // parameter [['s','s','s',n,n],['s','s','s',n,n],['s','s','s',n,n]] 参数 变量名，中文名，变量类别，变量最小，变量最大。
	parameter : [] ,
	ReturnValue : ['错误！', '太少！','太短！','太大！','太长！','不能为"零"！','不能为"空"！'] ,
	RegularType : ['Null','userMobile','userName','userAddress','StrLong','StrShort','Number','NotZero' ,'Date','Carded','Email'] , //  正则参数类别
			    // 空 ，联系电话，  姓名，    地址，      长字符串，   短字符串， 数值，   非零，   日期，   身份证，  邮箱
	RegularNotType : ['Null'] , //  非正则参数类别

	 //  参数正则验证
	RegularParameter: {
						userMobile : /^1[3-9][0-9]\d{8}$/ ,
						userName : /^[\da-zA-Z\u4E00-\u9FA5 \s]{2,20}$/ ,
						userAddress : /^[\da-zA-Z\u4E00-\u9FA5 \s]{4,400}$/ ,
						StrLong :  /^[\da-zA-Z\u4E00-\u9FA5 \s]{2,400}$/ ,
						StrShort : /^[\da-zA-Z\u4E00-\u9FA5 \s]{1,20}$/ ,
						Number :  /^\-?[1-9]*(\.?\d*)?$|^\-?0(\.\d*)?$/ ,
						NotZero : /^\-?[1-9]*(\.?\d*)?$|^\-?0(\.\d*)?$/ ,
						Date : /((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))/ ,
						Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*?/ ,
						Url : /^(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/  ,
						Null :  /^[\da-zA-Z\u4E00-\u9FA5 \s]{4,200}$/
	},

	//  开始
	begin : function(){
		var _varFlags = true ;
		var _varFlag  = true ;
		if (this.parameter.length > 0)
		{
			var obj = this.parameter;
			for(i=0;i<obj.length;i++)
			{
				var _NameValue = obj[i][0] ; //变量名
				var _ReturnValue = obj[i][1] ; //中文名
				var _ParameterType = obj[i][2] ; //，变量类别
				var _ParameterMin = obj[i][3] ; //变量最小值（长度）
				var _ParameterMax = obj[i][4] ; //，变量最大值（长度）
				console.log(obj[i]);
				_varFlag = this.test(_NameValue,_ReturnValue,_ParameterType,_ParameterMin,_ParameterMax);
				_varFlags = _varFlags && _varFlag ;
			}
		}else{
			_varFlags = false ;
			_varFlag  = false ;
		}
		return _varFlags;
	},


	// 各种 方式判断
	test : function(_NameValue,_ReturnValue,_ParameterType,_ParameterMin,_ParameterMax){
		if (this.RegularType.indexOf(_ParameterType)){
		}else{
			var  _ParameterType = this.RegularType[0];
		}
		var _varFlag = true;
		// 是否为空
		_varFlag = this.testNull(_NameValue,_ReturnValue);
		if ( ( this.RegularNotType.indexOf(_ParameterType) == -1) && (_varFlag) ){
			// 正则判定。
			var _eval = 'this.RegularParameter.' + _ParameterType;
			_RegularParameter = eval(_eval);
			_eval = 'this.testRegular(_RegularParameter,_NameValue,_ReturnValue)';
			//_varFlag = eval(_eval);
			_varFlag = this.testRegular(_RegularParameter,_NameValue,_ReturnValue);
		}
		if (_varFlag){
			if ( _ParameterType == 'Number' ) {
				//数字范围大小。
				_varFlag = this.testNumber(_NameValue,_ReturnValue,_ParameterMin,_ParameterMax);
			}else if( _ParameterMin >0  ||   _ParameterMax > 0 ){
				//字符串长度
				_varFlag = this.testLength(_NameValue,_ReturnValue,_ParameterMin,_ParameterMax);
			}
		}
		return _varFlag ;
	},

	// 验证是否为空
	testNull : function(_NameValue,_ReturnValue){
		var _varFlag = true ;
		if(typeof(_NameValue)=='undefined'){
		  this.testOutput(_ReturnValue,6) ;
		  _varFlag = false ;
		}else if (_NameValue == null){
		   this.testOutput(_ReturnValue,6) ;
		  _varFlag = false ;
		}else if (_NameValue == ''){
		  this.testOutput(_ReturnValue,6) ;
		  _varFlag = false ;
		}else if (_NameValue == 'null'){
		  this.testOutput(_ReturnValue,6) ;
		  _varFlag = false ;
		}
 		return _varFlag;
	},

	//数字范围大小。
	testNotZero : function(_NameValue,_ReturnValue,_ParameterMin,_ParameterMax){
		var _varFlag = false ;
		_NameValue = parseInt(_NameValue);
		if (_NameValue != 0){
			this.testOutput(_ReturnValue,5) ;
			_varFlag = false
		}else{
			_varFlag = true ;
		}
 		return _varFlag;
	},

	//数字范围大小。
	testNumber : function(_NameValue,_ReturnValue,_ParameterMin,_ParameterMax){
		var _varFlag = false ;
		_NameValue = parseInt(_NameValue);
		if (_NameValue >= _ParameterMin){
			_varFlag = true ;
		}else{
			this.testOutput(_ReturnValue,1) ;
			_varFlag = false ;
		}
		if (_NameValue <= _ParameterMax){
			_varFlag = true ;
		}else{
			this.testOutput(_ReturnValue,3) ;
			_varFlag = false
		}
		return _varFlag;
	},

	// 长度方式，变量名，返回UBOX的文案。
	testLength : function(_NameValue,_ReturnValue,_ParameterMin,_ParameterMax){
		var _varFlag = false ;
		if (_ParameterMin > 0 ){
			if (this.test_len(_NameValue) >=_ParameterMin){
				_varFlag = true ;
			}else{
				this.testOutput(_ReturnValue,2) ;
				_varFlag = false ;
			}
		}
		if (_ParameterMax > 0 ){
			if (this.test_len(_NameValue) <=_ParameterMax){
				_varFlag = true ;
			}else{
				this.testOutput(_ReturnValue,4) ;
				_varFlag = false
			}
		}
		return _varFlag;
	},
	// 正则方式，变量名，返回UBOX的文案。
	testRegular : function(_RegularParameter,_NameValue,_ReturnValue){
		var _varFlag = true ;
		console.log(_RegularParameter);
 		if (!(_RegularParameter.test(_NameValue))) {
			_varFlag = false ;
			this.testOutput(_ReturnValue,0) ;
		}
		return _varFlag;
	},

	testOutput : function(_ReturnValue,ErrNum){
		if (typeof('UBox') == "undefined")
		{
			if (this.OutputFunction.length > 3){ // 错误返回 回调方法 OutputFunction
				eval(this.OutputFunction);
			}
		}else{
			UBox.show( _ReturnValue + this.ReturnValue[ErrNum], -1);
		}
		return false;
	},

	// 中英文长度
	test_len : function (str) {
        var len = 0;
        for (var i = 0; i < str.length; i++) {
            var c = str.charCodeAt(i);
            //单字节加1
            if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
                len++;
            }
            else {
                len += 2;
            }
        }
        return len;
}
};

